﻿using System;

namespace ConsoleApplication1
{
    class Program
    {
        readonly int a = 1; // 声明时初始化
        readonly int b; // 构造函数中初始化
        Program()
        {
            b = 2;
        }
        static void Main(string[] args)
        {
            const double a = 3.14; // 正确声明常量的方法
            //const int b;// 错误，没有初始化
        }
    }
}
/*

1.静态常量（编译时常量）const

在编译时就确定了值，必须在声明时就进行初始化且之后不能进行更改，可在类和方法中定义。定义方法如下：

const double a=3.14；// 正确声明常量的方法
const int b;         // 错误，没有初始化
2.动态常量（运行时常量）readonly

在运行时确定值，只能在声明时或构造函数中初始化，只能在类中定义。定义方法如下：

class Program
{
    readonly int a=1;  // 声明时初始化
    readonly int b;    // 构造函数中初始化
    Program()
    {
        b=2;
    }
    static void Main()
    {
    }
}

*/

/*
 
在下面两种情况下：

 a、取值永久不变(比如圆周率、一天包含的小时数、地球的半径等)。
 b、对程序性能要求非常苛刻。
可以使用 const 常量，除此之外的其他情况都应该优先采用 readonly 常量。 

 */

/*
 
关于常量变量命名的规则：

带有 private 私有访问修饰符的常量要以骆驼命名法命名，即以下划线开头，第一个单词的首字母小写，余下单词首字母大写。

private const string _bookName = "新华字典";
带有 public 公共修饰符、protected 受保护修饰符等的常量要以帕斯卡命名法命名，即各个单词首字母都要大写。

public const int BookPrice = 10; 

 */